// 给axios设置统一的请求前缀
axios.defaults.baseURL = "http://localhost:8080";
Vue.prototype.$http = axios

function url2Param(url){
    let paramStr = url.split("?")[1];   // 根据?进行分割,拿到?后面的值
    let obj  = {};
    if(paramStr){ // typeId=27&xxx=yyy&xxx1=xxx2
        let paramArray = paramStr.split("&");
        for(let i=0;i<paramArray.length;i++){   // i=0 typeId=27 i=1 xxx=yyy i=2 xxx1=xx2
            let paramName = paramArray[i].split("=")[0];
            let paramValue = paramArray[i].split("=")[1];
            // 因为paramName它的值不是固定不变,所以要给query对象设置动态属性
            obj[paramName] = paramValue;
        }
    }
    return obj;
}

// 登录拦截:就是在跳转某个页面时,判断当前页面要不要登录才能访问,如果页面不需要登录就能访问就直接放行,
// 如果页面需要登录才能访问,去localstorage中获取loginUser,判断是否有值,如果有值就是登陆过就直接放行,如果没有值说明没有登录,要跳转回登录页面

// 定义当前不需要登录就能访问的页面
let passPage = ["index.html","wymc.html","callback.html","binder.html","shoppingCar.html"];
let url = location.href;    // 是获取当前要去到哪个页面  http://127.0.0.1/list.html

let isRun = false;  // 是否放行
if(url.endsWith("/")){  // 如果url以/结尾,说明要访问首页,就直接放行
    isRun = true;
}else{
    // 判断当前要访问的页面,在不在不需要登录就能访问的页面数组中,如果在就直接放行,如果不在就说明要登录才可以
    for(let i=0;i<passPage.length;i++){
        let page = passPage[i];
        // a.indexOf(b)  返回b在a字符串中所在的位置
        if(url.indexOf(page) > -1){ // http://127.0.0.1/index.html.indexOf(index.html)>-1
            isRun = true;   // 要放行
            break;
        }
    }
}

if(!isRun){
    // 如果不放行,判断当前有没有登录
    let loginUser = localStorage.getItem("loginUser");
    if(!loginUser){  // 有值说明已经登录,就不用管它,否则没有登录,要提示当前未登录,并跳转回登录页面
        alert("请登录后再次操作!");
        location.href = "/index.html";
    }
}

// 前置拦截器 -> 在调用到后端接口之前先,先给每个请求加上一个请求头
axios.interceptors.request.use(
    config => {
        // 从localStorage中获取token
        let token = localStorage.getItem("token");

        // 如果token有值,我们就放到请求头里面
        if (token) {
            config.headers.token = token;
        }
        return config
    },
    error => {
        return Promise.reject(error)
    })
// 响应拦截器 : 后端响应给前端接口的数据,
axios.interceptors.response.use(function(response){
    //对返回的数据进行操作
    let result = response.data;  // response.data 就是后端返给我们的数据
    if(!result.success && result.msg == "noLogin"){ // 说明未登录,被拦截了,那么就要跳回到登陆页面
        alert("当前操作需要登录后才能操作,请先进行登录!");
        localStorage.removeItem("token");
        localStorage.removeItem("loginUser");
        location.href = "/index.html";
        return;
    }else{
        return response
    }
},function(err){
    return Promise.reject(err)
})